home *** CD-ROM | disk | FTP | other *** search
- The following is a list of keyboard values and the key or key sequences
- that give those values. This list and all routines have been written on the
- IBM PC with TURBO V2.0.
-
- KEY NUMBER KEY(S)
- ---------- ------
- 127 Ctrl Backspace
- 131 Ctrl 2 or @ (NUL character)
- 132 - 135 Alt (9, 0, -, =)
- 136 Ctrl PgUp
- 143 Shift Tab
- 144 - 153 Alt (Q, W, E, R, T, Y, U, I, O, P)
- 158 - 166 Alt (A, S, D, F, G, H, J, K, L)
- 172 - 178 Alt (Z, X, C, V, B, N, M)
- 187 - 196 F1 - F10
- 199 Home
- 200 Up Arrow
- 201 PgUp
- 203 Left Arrow
- 205 Right Arrow
- 207 End
- 208 Down Arrow
- 209 PgDn
- 210 Ins
- 211 Del
- 212 - 221 Shift F1 - F10
- 222 - 231 Ctrl F1 - F10
- 232 - 241 Alt F1 - F10
- 242 Ctrl PrtSc
- 243 Ctrl Left Arrow
- 244 Ctrl Right Arrow
- 245 Ctrl End
- 246 Ctrl PgDn
- 247 Ctrl Home
- 248 - 255 Alt 1 - 8
-
- It seems that there are two distinct needs for getting character routines.
- The first is to obtain a specific character or one of a specific set of
- characters. This case is handled by the function GETCHAR. The second is to
- determine whether or not a key has been pressed and if it has, what value does
- it have. This case is handled by the function KEYPRESS.
-
- FUNCTION GETCHAR (ALLOWABLE : CHARSET) : CHAR;
-
- { TYPE NEEDED : CHARSET = SET OF CHAR
- INCLUDE FILE NEEDED : BEEP.MOD
- RETURNS KEY VALUE ENTERED FROM THE KEYBOARD.
- WILL DISPLAY CHARACTERS IN THE RANGE FROM 32 TO 126 ASCII.
- HANDLES ALL SPECIAL KEYS LISTED ABOVE.
- ALLOWABLE IS THE SET OF ALLOWABLE CHARACTERS.
- RETURNS A CONTROL-C AS A #3. }
-
- TYPE
- REGPACK = RECORD
- AX, BX, CX, DX, BP, SI, DI, DS, ES, FLAGS : INTEGER;
- END; (* OF RECORD *)
-
- VAR
- REGS : REGPACK; (* VARIABLE TO ACCESS DOS *)
- HIGH : BYTE; (* VALUE OF HIGH BYTE OF AX *)
- LOW : BYTE; (* VALUE OF LOW BYTE OF AX *)
- ENTRY : CHAR; (* CHARACTER ENTERED AT KEYBOARD *)
- GOOD : BOOLEAN; (* TRUE IF ENTRY IS IN THE ALLOWABLE SET *)
-
- BEGIN (* FUNCTION GETCHAR *)
-
- REPEAT
- REGS.AX := 0;
- INTR ($16, REGS);
- HIGH := HI (REGS.AX);
- LOW := LO (REGS.AX);
- IF LOW = 0
- THEN BEGIN { EXTENDED CODE }
- IF HIGH > 127 { HAPPENS WITH ALT 9, 0, -, = AND CTRL PGUP }
- THEN HIGH := HIGH - 124;
- LOW := 128 + HIGH;
- END; { EXTENDED CODE }
- ENTRY := CHR (LOW);
- GOOD := ENTRY IN ALLOWABLE;
- IF NOT GOOD
- THEN BEEP
- ELSE IF ENTRY IN [#32..#126] { PRINTABLE CHARACTERS }
- THEN WRITE (ENTRY);
- UNTIL GOOD;
- GETCHAR := ENTRY;
-
- END; (* FUNCTION GETCHAR *)
-
- FUNCTION KEYPRESS (VAR ASCII : BYTE) : BOOLEAN;
-
- { ASCII WILL BE THE VALUE OF THE LOW BYTE AT 600.
- THIS LOCATION RETURNS THE CHARACTER PRESSED OR ZERO IF NO CHARACTER
- WAS PRESSED.
- YOU MUST INITIALIZE THE DX REGISTER TO $FF WHEN CALLING 600. }
-
- TYPE
- REGPACK = RECORD
- AX, BX, CX, DX, BP, SI, DI, DS, ES, FLAGS : INTEGER;
- END; (* OF RECORD *)
-
- VAR
- REGS : REGPACK; (* VARIABLE TO ACCESS DOS *)
-
- BEGIN (* FUNCTION KEYPRESS *)
-
- REGS.AX := $600;
- REGS.DX := $FF;
- MSDOS (REGS);
- ASCII := LO (REGS.AX);
- IF ASCII = 0
- THEN BEGIN (* EITHER NO KEY OR EXTENDED CODE *)
- REGS.AX := $600;
- REGS.DX := $FF;
- MSDOS (REGS);
- ASCII := LO (REGS.AX);
- IF ASCII = 0
- THEN KEYPRESS := FALSE (* NO KEY HAS BEEN PRESSED *)
- ELSE BEGIN (* A SPECIAL KEY WAS PRESSED *)
- IF ASCII > 127 (* SAME ROUTINE AS IN GETCHAR *)
- THEN ASCII := ASCII - 124;
- ASCII := ASCII + 128;
- KEYPRESS := TRUE;
- END; (* A SPECIAL KEY WAS PRESSED *)
- END (* EITHER NO KEY OR EXTENDED CODE *)
- ELSE KEYPRESS := TRUE; (* A "NORMAL" KEY HAS BEEN PRESSED *)
-
- END; (* FUNCTION KEYPRESS *)
-
- Note that GETCHAR requires the following procedure BEEP.
-
- PROCEDURE BEEP;
-
- { THIS PROCEDURE WILL PRODUCE A BEEP AT 600 HERTZ FOR .1 SECONDS.
- SOUNDS BETTER AND IS FASTER THAN A WRITE (CHR (7)).
- CALL THIS PROCEDURE ONCE AFTER BOOTING SINCE THE SYSTEM DOES NOT
- SEEM TO ACTIVATE THE SPEAKER ON THE FIRST CALL. }
-
- BEGIN (* PROCEDURE BEEP *)
-
- SOUND (600);
- DELAY (100);
- NOSOUND;
-
- END; (* PROCEDURE BEEP *)
-
- I do not know why this does not work on the first call after a fresh
- boot - any speaker experts out there?
-
- If these are of interest, I have modules that build on function GETCHAR.
- These are GETSTRING, GETFILENAME, GETINTEGER, and GETREAL. They make
- interactive input a breeze.
-
- Jeff Cole
- Anoka - Ramsey Community College
- 11200 Mississippi Boulevard N.W.
- Coon Rapids, MN 55433
- (612) 427 - 2600 ext. 246
-
- You can find Jeff on Terrapin Station BBS -- 612/623-0152
- 24 hours -- 300/1200/2400
-